.TH std::ratio 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::ratio \- std::ratio

.SH Synopsis
   Defined in header <ratio>
   template<

       std::intmax_t Num,       \fI(since C++11)\fP
       std::intmax_t Denom = 1

   > class ratio;

   The class template std::ratio provides compile-time rational arithmetic support.
   Each instantiation of this template exactly represents any finite rational number as
   long as its numerator Num and denominator Denom are representable as compile-time
   constants of type std::intmax_t. In addition, Denom may not be zero and both Num and
   Denom may not be equal to the most negative value.

   The static data members num and den representing the numerator and denominator are
   calculated by dividing Num and Denom by their greatest common divisor. However, two
   std::ratio with different Num or Denom are distinct types even if they represent the
   same rational number (after reduction). A std::ratio type can be reduced to the
   lowest terms via its type member: std::ratio<3, 6>::type is std::ratio<1, 2>.

   The following convenience typedefs that correspond to the SI ratios are provided by
   the standard library:

   Defined in header <ratio>
   Type                 Definition
   quecto (since C++26) std::ratio<1, 1000000000000000000000000000000> (10^-30)^[1]
   ronto (since C++26)  std::ratio<1, 1000000000000000000000000000>    (10^-27)^[1]
   yocto                std::ratio<1, 1000000000000000000000000>       (10^-24)^[1]
   zepto                std::ratio<1, 1000000000000000000000>          (10^-21)^[1]
   atto                 std::ratio<1, 1000000000000000000> (10^-18)
   femto                std::ratio<1, 1000000000000000>    (10^-15)
   pico                 std::ratio<1, 1000000000000>       (10^-12)
   nano                 std::ratio<1, 1000000000>          (10^-9)
   micro                std::ratio<1, 1000000> (10^-6)
   milli                std::ratio<1, 1000>    (10^-3)
   centi                std::ratio<1, 100>     (10^-2)
   deci                 std::ratio<1, 10>      (10^-1)
   deca                 std::ratio<10, 1>      (10^1)
   hecto                std::ratio<100, 1>     (10^2)
   kilo                 std::ratio<1000, 1>    (10^3)
   mega                 std::ratio<1000000, 1> (10^6)
   giga                 std::ratio<1000000000, 1>          (10^9)
   tera                 std::ratio<1000000000000, 1>       (10^12)
   peta                 std::ratio<1000000000000000, 1>    (10^15)
   exa                  std::ratio<1000000000000000000, 1> (10^18)
   zetta                std::ratio<1000000000000000000000, 1>          (10^21)^[2]
   yotta                std::ratio<1000000000000000000000000, 1>       (10^24)^[2]
   ronna (since C++26)  std::ratio<1000000000000000000000000000, 1>    (10^27)^[2]
   quetta (since C++26) std::ratio<1000000000000000000000000000000, 1> (10^30)^[2]

    1. ↑ ^1.0 ^1.1 ^1.2 ^1.3 These typedefs are only defined if std::intmax_t can
       represent the denominator.
    2. ↑ ^2.0 ^2.1 ^2.2 ^2.3 These typedefs are only defined if std::intmax_t can
       represent the numerator.

.SH Notes

   Feature-test macro  Value    Std                        Feature
   __cpp_lib_ratio    202306L (C++26) Adding the new 2022 SI prefixes: quecto, quetta,
                                      ronto, ronna

.SH Example


// Run this code

 #include <ratio>

 static_assert
 (
     std::ratio_equal_v<std::ratio_multiply<std::femto, std::exa>, std::kilo>
 );

 int main() {}

.SH See also

   Mathematical constants (C++20) provides several mathematical constants, such as
                                  std::numbers::e for e
